Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Пользователь


Сообщения: 114
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


Может я чтото не так делаю но код вообще не запускается, в процессах имя приложения ElementClient.exe вот с него берется PID который нужен в дальнейшем для _MouseClickPlus

PHP код: Выделить весь код

;===============================================================================

;
; Function 
Name:  _MouseClickPlus()
Version added:  0.1
Description:    Sends a click to windownot entirely accuratebut works 
;                 minimized.
Parameter(s):   $Window     =  Title of the window to send click to
;                 $Button     =  "left" or "right" mouse button
;                 $X          =  X coordinate
;                 $Y          =  Y coordinate
;                 $Clicks     =  Number of clicks to send
Remarks:        You MUST be in "MouseCoordMode" 0 to use this without bugs.
Author(s):      Insolence <insolence_9@yahoo.com>
;
;===============================================================================

HotKeySet ("{HOME}",  "_MouseClickPlus" )
HotkeySet ("{END}""_MakeLong"       )

из нашего процесса берем ид... 
$Window _ProcessGetWindow("ElementClient.exe"1)  
ConsoleWrite($Window & @CRLF)  
  
Func _ProcessGetWindow($iPID$iRet=-1)  
    
Local $aWinList WinList()  
    
Local $aRet[2]  
  
    If 
IsString($iPIDThen $iPID ProcessExists($iPID)  
  
    For 
$i 1 To UBound($aWinList)-1  
        
If WinGetProcess($aWinList[$i][1]) = $iPID Then  
            $aRet
[0] = $aWinList[$i][0] ;Title  
            $aRet
[1] = $aWinList[$i][1] ;WinHandle  
  
            
If $iRet 0 Then Return $aRet[0]  
            If 
$iRet 1 Then Return $aRet[1]  
  
            Return 
$aRet  
        
EndIf  
    
Next  
  
    
Return SetError(10$aRet)  
EndFunc

Func _MouseClickPlus
($Window$Button "left"$X ""$Y ""$Clicks 1000)
  
Local $MK_LBUTTON       =  0x0001
  Local $WM_LBUTTONDOWN   
=  0x0201
  Local $WM_LBUTTONUP     
=  0x0202
  
  Local $MK_RBUTTON       
=  0x0002   
  Local $WM_RBUTTONDOWN   
=  0x0204
  Local $WM_RBUTTONUP     
=  0x0205

  Local $WM_MOUSEMOVE     
=  0x0200
  
  Local $i                
0
  
  Select 
  
Case $Button "left"
     
$Button     =  $MK_LBUTTON
     $ButtonDown 
=  $WM_LBUTTONDOWN
     $ButtonUp   
=  $WM_LBUTTONUP
  
Case $Button "right"
     
$Button     =  $MK_RBUTTON
     $ButtonDown 
=  $WM_RBUTTONDOWN
     $ButtonUp   
=  $WM_RBUTTONUP
  EndSelect
  
  
If $X "" OR $Y "" Then
     $MouseCoord 
MouseGetPos()
     
$X $MouseCoord[0]
     
$Y $MouseCoord[1]
  EndIf
  
  For 
$i 1 to $Clicks
     DllCall
("user32.dll""int""SendMessage"_
        
"hwnd",  WinGetHandle$Window ), _
        
"int",   $WM_MOUSEMOVE_
        
"int",   0_
        
"long",  _MakeLong($X$Y))
        
     
DllCall("user32.dll""int""SendMessage"_
        
"hwnd",  WinGetHandle$Window ), _
        
"int",   $ButtonDown_
        
"int",   $Button_
        
"long",  _MakeLong($X$Y))
        
     
DllCall("user32.dll""int""SendMessage"_
        
"hwnd",  WinGetHandle$Window ), _
        
"int",   $ButtonUp_
        
"int",   $Button_
        
"long",  _MakeLong($X$Y))
  
Next
EndFunc




Func _MakeLong
($LoWord,$HiWord)
  Return 
BitOR($HiWord 0x10000BitAND($LoWord0xFFFF))
EndFunc 

...ммм пока писал, понел что wingethandle нужен не пид а титлы значит его надо сменить на WinGetProcess
По правильному пути пошел хз )) поправьте пожалста...
п.с. решение нашел для uopilot (програмка для написания автоматизированных действий игры) где достаточно указать pid и в фоновом режиме идет нажатия клавишь, независимо что вы делаете в активном/другом приложении. НО предпочтение всетаки отдаю AutoIT так немного освоил и гайды подробнее.

Отправлено: 05:01, 31-05-2009 | #6