2009-10-20 19 views
4

Salut je veux faire une sorte d'un bot pour WLM, Mais le ControlSend normal AutoIt ne fonctionnera pasUtiliser le contrôle envoyer sur windows live messenger texte de saisie automatique

la question fondamentale est de savoir comment puis-je envoyer un message texte à la fenêtre Windows Live Messenger sans l'activer?

Exemple: Il y a quelqu'un dans WLM avec la fenêtre appelée active "Joop" je fais:

ControlClick("Joop","","[CLASS:DirectUIHWND; INSTANCE:2]","Left",1,322,507) 
ControlSend("Joop","","[CLASS:DirectUIHWND; INSTANCE:2]","Hi Joop") 

cela ne fonctionne cependant pas quand je fais

WinActivate("Joop","") 
ControlClick("Joop","","[CLASS:DirectUIHWND;INSTANCE:2]","Left",1,322,507) 
ControlSend("Joop","","[CLASS:DirectUIHWND; INSTANCE:2]","Hi Joop") 

il fonctionne cependant maintenant c'est activé ce que je ne veux pas. il y a un problème avec la fenêtre toute la fenêtre de conversation de msn est une fenêtre donc aucun contrôle supplémentaire pour thats c'est pourquoi j'ai essayé le contolClick sur les coordonnées de l'écran de frappe sans succ6

ceci est le résumé.

Text: 
Position: 0, 28 
Size: 882, 607 
ControlClick Coords: 282, 180 
Style: 0x56000000 
ExStyle: 0x00010000 
Handle: 0x00190916 

>>>> Mouse <<<< 
Position: 1885, 557 
Cursor ID: 0 
Color: 0xFFFFFF 

>>>> StatusBar <<<< 

>>>> Visible Text <<<< 


>>>> Hidden Text <<<< 
CVoiceVideoAvatarHostWindow 

personne ne sait comment obtenir quelque chose dans ce champ de texte sans l'activer (il peut fonctionner sur fond) et en utilisant une fonction boiteuse comme envoi.

OU comment puis-je envoyer un texte aux fenêtres en direct fenêtre de messagerie sans l'activer

Merci Matthy

Répondre

0

Certains modèles et interfaces, il est très difficile, voire quasiment impossible, pour AutoIt puiser dans l'interface pour lire les informations de contrôle. Je suggère soit d'utiliser le protocole WLM manuellement via votre propre client, soit d'utiliser un client qui ne rend pas l'écran saisissant le texte difficile ou impossible.

0

Ok, peut-être enfin une réponse ... au moins cette application test I codé fonctionne comme suit:

Quelque part au début de votre script, vous devez définir l'état de votre WLM à @SW_HIDE. Plus tard, lorsque vous essayez de faire ControlXxxx -stuff vous devez d'abord définir une variable sur votre fenêtre active. Vous pouvez maintenant bloquer votre entrée et activer votre fenêtre cachée. Il fonctionne maintenant comme vous l'avez décrit ci-dessus et ensuite vous réactivez votre dernière fenêtre active. Défaites éventuellement le bloc d'entrée. Cela devrait résoudre votre question avec le temps de pause minimum ... vous pouvez jouer avec votre Mouse Cursor Style en même temps pour simuler une charge CPU, donc l'entrée du bloc n'est pas trop offensante. Mais l'action est si rapide que vous ne la reconnaîtrez même pas ... (peut-être que ça va avaler quelques claviers)

Faites un essai!

Opt("WinTitleMatchMode", 2) 

#include <GuiConstantsEx.au3> 
$GUI = GUICreate("Beispiel HiddenApp", 392, 323) 
$ed = GUICtrlCreateEdit("nix", 1, 1, 390, 321) 
GUISetState() 

Sleep(1000) 

GUISetState(@SW_HIDE, $GUI) 
WinActivate("SciTE") 
Sleep(1000) 

BlockInput(1) 
$act = WinActive("[ACTIVE]") 
WinActivate($GUI) 
ControlClick($GUI, "", $ed, "primary", 1, 50, 50) 
ControlSend($GUI, "", $ed, "before{Alt}{Tab}after") 
WinActivate($act) 
BlockInput(0) 

Sleep(1000) 

GUISetState(@SW_SHOW, $GUI) 

While 1 
    Switch GUIGetMsg() 
     Case $GUI_EVENT_CLOSE 
      ExitLoop 
     Case Else 
      ;;; 
    EndSwitch 
WEnd 
1

MSN résiste volontairement à l'automatisation. Ce n'est pas une limitation de l'API Windows. Si votre objectif est d'automatiser un chat MSN, vous pouvez le faire soit en envoyant directement les paquets TCP, soit en automatisant une autre application qui supporte MSN (Digsby, Pidgin, etc.) et qui fonctionne mieux avec l'automatisation. En envoyant directement les paquets TCP, vous écrivez votre propre programme, à partir de rien, qui se comporte comme le MSN. Il y a une documentation faite par l'utilisateur sur le protocole.Celui que j'ai utilisé dans le passé est ici: http://www.hypothetic.org/docs/msn/notification/authentication.php mais je ne suis pas du tout certain qu'il soit toujours à jour. Si vous êtes familier avec le réseautage, le TCP, la capture de paquets et la relecture, alors je vous suggère de suivre cette voie car c'est l'approche la plus stable et la plus durable. (Et je pense: le plus amusant.)

Cependant, tous les projets ne demandent pas une approche stable et à long terme. Il me semble que vous étiez en train de jouer avec l'automatisation de certaines des applications que vous aviez sur votre ordinateur, et MSN est bien sûr l'un des plus intéressants. Microsoft a décidé que lorsqu'ils construiraient le client MSN, personne ne devrait essayer d'automatiser l'application. Je pense que c'était surtout fait pour empêcher le spam. Dans les premiers jours, cela a fonctionné, parce que d'autres personnes n'avaient pas encore documenté publiquement le protocole. Et donc, toute personne qui voulait spammer maintenant devait faire un investissement coûteux.

Si vous décidez de poursuivre l'automatisation du client MSN officiel, ou toute autre application qui résiste à l'automatisation, il y a quelques trucs que vous pouvez essayer:

  • ControlSend sans spécifier le paramètre de contrôle (utilisation vide chaîne « »)
  • ControlClick sur la fenêtre en spécifiant les coordonnées avec l'aide d'une chaîne vide pour le paramètre de contrôle à nouveau
  • Finalement, tout simplement Envoyer/MouseClick avec option BlockInput

Il y a beaucoup plus de combinaisons que vous pouvez essayer (en particulier les fonctions ControlX) qui fonctionnent parfois miraculeusement, mais rappelez-vous qu'à la fin ce ne sont que des messages de fenêtre. Vous pouvez tout faire en automatisation avec la fonction _SendMessage, à condition de savoir ce que vous faites.