Войти

Показать полную графическую версию : [решено] как узнать pid активного окна ???


shyra1976
26-05-2009, 16:46
как узнать pid активного окна ???

Yashied
26-05-2009, 17:28
Может быть хендл (hWnd)? Или ID (PID) процесса, связанного с активным окном?

1.
WinGetHandle('[ACTIVE]')

2.
WinGetProcess('[ACTIVE]')

shyra1976
27-05-2009, 09:04
У меня класс окно : Afx:00400000:8:00010011:00000006:01590C87
а класс другого окна: Afx:00400000:8:00010011:00000006:073E0BA9
и таких окон много Только процесс одинаков Вот Я думал по процессу делать проверку

shyra1976
11-06-2009, 10:19
есть у кого мысли ?

Medic84
11-06-2009, 20:02
А посмотри на программку Au3Info.exe лежит там же где и AutoIT там можно получить что тор типа этого


>>>> Window <<<<
Title:
Class: Shell_TrayWnd
Position: 0, 566
Size: 1024, 34
Style: 0x96000000
ExStyle: 0x00000088
Handle: 0x0003004E

>>>> Control <<<<
Class: ToolbarWindow32
Instance: 2
ClassnameNN: ToolbarWindow322
Advanced (Class): [CLASS:ToolbarWindow32; INSTANCE:2]
ID:
Text: Выполнение приложений
Position: 263, 0
Size: 526, 30
ControlClick Coords: 469, 22
Style: 0x52009345
ExStyle: 0x00000000
Handle: 0x00010084

>>>> Mouse <<<<
Position: 732, 592
Cursor ID: 2
Color: 0x55A0FF

>>>> StatusBar <<<<

>>>> Visible Text <<<<
пуск
21:01
Область уведомлений
TF_FloatingLangBar_WndTitle
Выполнение приложений
Выполнение приложений
Quick Launch


>>>> Hidden Text <<<<


если уже знаешь извиняй, я предложил. Может еще смысл программы расскажешь чуть?

shyra1976
30-06-2009, 09:50
у нас на работе установили программу для ввода данных
Но она понимает только большые буквы
Вот я и хотел написать программу в что бы каждый раз что я обращаюсь к окну для заполнения данных у меня включался Caps lock

Проблема в том что в программе для ввода данных можно открыть много окон как в OUTLOOK
и в каждом окне можно писать данные
Пока смог написать только что бы Caps lock сробатовал в первом окне В остальных не работает Caps lock

proxy
30-06-2009, 10:16
shyra1976, пример:
Opt('TrayIconDebug', 1)
HotKeySet('{ESC}', '_Pro_Exit'); Клавиша ESC - закрыть скрипт
Global $sTitel, $hWnd, $iPID, $sFile

While 1
$hWnd = WinGetHandle('[Active]')
$sTitel = WinGetTitle($hWnd)
$iPID = WinGetProcess($hWnd)
$sFile = _ProcessGetLocation($iPID)
ToolTip('Указатель окна:' & @TAB & $hWnd & @CRLF & _
'Заголовок окна:' & @TAB & $sTitel & @CRLF & _
'PID процесса:' & @TAB & @TAB & $iPID & @CRLF & _
'Файл процесса:' & @TAB & @TAB & $sFile, _
10, 100, 'Активное окно')
Sleep(100)
WEnd

Func _ProcessGetLocation($iPID)
Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
If $aProc[0] = 0 Then Return SetError(1, 0, '')
Local $vStruct = DllStructCreate('int[1024]')
DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
Return $aReturn[3]
EndFunc

Func _Pro_Exit()
Exit
EndFunc




у нас на работе установили программу для ввода данных
Но она понимает только большые буквы
Вот я и хотел написать программу в что бы каждый раз что я обращаюсь к окну для заполнения данных у меня включался Caps lock
Проблема в том что в программе для ввода данных можно открыть много окон как в OUTLOOK
и в каждом окне можно писать данные
Пока смог написать только что бы Caps lock сробатовал в первом окне В остальных не работает Caps lock »
могу подкинуть десяток запятых :yahoo: - даром ))))))))

Belfigor
30-06-2009, 11:22
Я для определения Pid уже известного мне процесса использую это:
$title = 'MMO A1'
$exe = 'game.exe'

Func Pid()
Global $pid = ProcessExists($title)
If ($pid == 0) Then
$pid = ProcessExists($exe)
EndIf

If ($pid == 0) Then
SetError(1)
Else
SetError(0)
EndIf
EndFunc




© OSzone.net 2001-2012