2009-05-09 9 views
6

Sto creando un bot per un gioco Flash e ho capito come importare tutte le funzioni AutoIt nel mio codice C#.Invio di messaggi a un gioco Flash con C# e AutoIt

string title = "Minesweeper"; 
string full = auto.WinGetTitle(title,""); 
string handle = auto.WinGetHandle(full, ""); 
if (auto.WinExists(full, "") == 1) 
    textBox1.Text = "window exists"; 
addressBox.Text = full; 

for (int r = 1; r < 40; r++) 
{ 
    auto.ControlClick(full, "", "", "left", 2, r * 10, r * 10); 
    //auto.ControlClick(handle, "", "", "left", 2, r * 10, r * 10); 
} 

(io sono abbastanza sicuro quello commentata dovrebbe essere quello con manico e viceversa, ma questo funziona per Minesweeper.)

Così funziona per Minesweeper e non richiede di essere la finestra attiva. Quando provo a farlo funzionare sul mio gioco Flash, è necessario che la finestra di Internet   Explorer sia attiva. È qualcosa che Flash richiede o c'è qualcosa di aggiuntivo che potrei fare per farlo funzionare quando il gioco è ridotto al minimo?

Questo non deve essere eseguito utilizzando le importazioni di AutoIt. Ho provato anche SendMessage da user32 a un certo punto, ma non ha funzionato per i contenuti Flash per me.

Ho appena testato questo su un sito web a caso invece di un sito Flash o Minesweeper e per qualche motivo il codice funziona se eseguo dall'interno del programma di scripting Autoit, ma non dal mio programma C# ...

20 giugno 2012: Sono abbastanza sicuro che questo abbia qualcosa a che fare con il modo in cui viene gestita la maniglia. Ho fatto alcuni test con la chiamata di un file EXE AutoIt e utilizzando l'handle che ottengo dal codice C# come argomento, devo aggiungere un 0x ad esso, e anche successivamente nel codice AutoIt devo farlo da una stringa a un HWnd, in modo che possa essere qualcosa, nel qual caso non so cosa fare poiché la funzione importata si basa su un input di stringa per l'handle.

+0

Come hai esportato le funzioni di autoit in C#? Sono solo curioso. –

+0

http://www.lancelarsen.com/Blog/tabid/72/EntryId/48/AutoIt-C-Helper-Library.aspx Theres un sito con le risorse dove qualcuno ha fatto una classe di importare le funzioni dalla libreria DLL. Ma penso che se si include solo la libreria non è necessariamente necessario utilizzare quella classe che ha fatto. Dico questo perché la sua classe helper non include tutte le funzioni come importazioni ma è comunque possibile accedere a tutti i metodi autoit. –

risposta

3

Qualcosa che si potrebbe voler provare a escludere l'handle della finestra e problemi di gestione variabili. Non dovrebbe essere necessario utilizzare WinGetTitle perché il titolo della finestra "Campo minato" dovrebbe funzionare correttamente. Secondo il mio AutoIt v3 Info finestra di Windows 7 il titolo e la classe della finestra del campo minato sono entrambi Campo minato. Così difficile codifica

auto.ControlClick ("[TITOLO: Minesweeper; CLASSE: Minesweeper], "", "", "sinistra", 2, r * 10, r * 10);

potrebbe funzionare. per ulteriori informazioni su come funziona vedere Descrizioni finestra Avanzate nel file di aiuto AutoIt. Se questo aspetto ancora non funziona fino WinTitleMatchMode nel file di aiuto. Esso consente di impostare alcune regole per clemenza nella corrispondenza del titolo della finestra che potrebbe renderlo più facile per voi.

AutoIt X è AutoIt versione di controllo DLL/COM è come si dovrebbe aggiungere AuotIt a qualsiasi lingua che ha il supporto DLL/COM. Nel caso in cui qualcun altro si stesse chiedendo how you would use AutoIt in C#. Sfortunatamente AutoIt X è spesso in ritardo nello sviluppo e nei test dalla lingua principale. Anche se non ho motivo di pensare che il tuo problema sia causato da un bug, dando solo qualche informazione sul progetto AutoItX. Se non lo hai già, dovresti pubblicare una copia di questa domanda nel forum ActiveX/COM Help and Support (AutoItX). Una delle cose migliori di AutoIt nella mia esperienza nel corso degli anni è la comunità (che non si è trasferita qui molto). Quella particolare sezione del forum è frequentata da alcuni degli sviluppatori della lingua che sarebbero felici di aiutare.

Come per il tuo 20 giugno note, AutoIt tratta tutte le variabili come stringhe finché non rileva che è qualcosa di speciale. Non sa che un valore è esadecimale a meno che non inizi con il 0x che hai menzionato. Questo ha causato ogni sorta di strani problemi per me in passato. In diverse occasioni ho dovuto aggiungere zero a una variabile per far sì che AutoIt la valutasse correttamente dopo. Questo non accade spesso con AutoIt3, ma solo qualcosa da tenere a mente.

Se è necessario un codice di riferimento AutoIt, molti membri dello AutoIt forum have made Minesweeper bots possono controllare e possibilmente vedere qualcosa di utile.

+0

grazie Sicuramente guarderò a quelle risorse Stavo solo usando il dragamine per imparare però, e questo ancora non risolve il mio problema del gioco in flash. Ma farò ancora un po 'di armeggiare con quello che mi hai mostrato –

+0

beh, il tempo è quasi arrivato, quindi ti sto dando la taglia anche se non sono completamente soddisfatto Speravo di scoprire come fare clic su un webbrowser, potrei già farlo in dragamine come ho spiegato Ma la tua era la migliore delle risposte disponibili grazie –

1

Assicurati di eseguire il tuo programma C# come amministratore. Questa è l'unica differenza che vedo per un metodo che funziona e l'altro no.