[..] Custom function

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

[..] Custom function

#1

Message par lesolutionneur »

Voilà, comme il existait pas de fonction (ou alors, je n'ai pas vu), ni de IsAppResponding, j'ai décidé de faire une fonction IsAppResponding moi-même.

Notre amis MSDN nous informe que:
LRESULT WINAPI SendMessageTimeout(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam,
__in UINT fuFlags,
__in UINT uTimeout,
__out_opt PDWORD_PTR lpdwResult
);
Le dernier paramètre est probablement celui qui pose problème mais il est optionnel.
Je n'en ai pas besoin mais si je ne le spécifie pas, autoit plante lamentablement :(

Voici mon code qui devrait nous donner "true" et non "false" et chez moi, il retourne "false".

Code : Tout sélectionner

Func _IsAppResponding($hWnd, $TimeOut = 1000)
    $Dll = DllOpen("user32.dll")
    local $lresult
    $WM_NULL = 0
    $SMTO_BLOCK = 1
    $SMTO_ABORTIFHUNG = 2
    Local $aResult = DllCall($Dll, "lresult", "SendMessageTimeoutW", "hwnd", $hWnd, "uint", $WM_NULL, "wparam", 0, "lparam", 0, "uint", $SMTO_BLOCK + $SMTO_ABORTIFHUNG, "uint", $TimeOut, "pdword_ptr", $lresult) 
    $Dll = DllClose ("user32.dll")
If @error Then Return SetError(@error, @extended, "")

If $aResult Then
    return "true"
Else
    return "false"
EndIf
EndFunc

$hWnd = WinGetHandle("Sans titre - Bloc-notes")
MsgBox(0, default, $hWnd & @CRLF & @error & @CRLF & @extended)
$answer = _IsAppResponding($hWnd, 1000)
MsgBox(0, default, $answer & @CRLF & @error & @CRLF & @extended)

Merci pour votre aide ! :)

EDIT: j'ai cru lire autre part que WinGetHandle ratait si l'application ne répond pas, est-ce vrai ?
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Custom function

#2

Message par sylvanie »

votre type manquant n'est autre qu'un pointeur sur un Dword, qu'il faut préalablement créer :
► Afficher le texte
NB : attention à @error, elle se réfère à la dernière action faite. Dans un de vos tests, vous testiez donc le Dllclose au lieu du DllCall
NB2: Le retour de Dlllcall en cas de réussite est un tableau dont la première composante représente la valeur retournée.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre