Hi CyberCommander,
ist hier schon jemand bei oder hat sich noch niemand gefunden, der die DLL erstellt ?!
Gruß
Greenhorn
Hi CyberCommander,
ist hier schon jemand bei oder hat sich noch niemand gefunden, der die DLL erstellt ?!
Gruß
Greenhorn
Hi,
zu 1.
Sieh dir den Rückgabewert von DllOpen an, und den von LoadLibrary, dann weißt du warum.
zu 2.
Ich weiß es nicht. AutoIt-Strings können eine max. Länge von 'was weiß ich' haben. Diese Zahl könntest Du genausogut nehmen.
Gruß
Greenhorn
Herzlichen Glückwunsch zum Geburtstag, ProgAndy !
[Blockierte Grafik: http://www10.pic-upload.de/17.02.12/2xeusp3i6po.gif]
LG
Greenhorn
Hi,
MyDll.rc
resource.h
Dll kompilieren ...
LoadStringDemo.au3
; Aus resource.h
Global Const $IDS_STRING1 = 40000
Global Const $IDS_STRING2 = 40001
Global $hDll
Global $sString
$hDll = LoadLibrary ("MyDll.dll")
[/autoit] [autoit][/autoit] [autoit];...
;...
LoadString ($hDll, $IDS_STRING1, $sString, 260)
MsgBox ($MB_OK, "LoadString Demo", $sString)
;...
;...
FreeLibrary ($hDll)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func LoadString ($hInstance, $uID, ByRef $lpBuffer, $nBufferMax)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($user32dll, "INT", "LoadStringW", _
"HANDLE", $hInstance, _
"UINT", $uID, _
"WSTR", $lpBuffer, _
"INT", $nBufferMax)
$lpBuffer = $aRes[3]
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func LoadLibrary ($lpFileName)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ("kernel32.dll", "HANDLE", "LoadLibraryW", _
"WSTR", $lpFileName)
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func FreeLibrary ($hModule)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ("kernel32.dll", "BOOL", "FreeLibrary", _
"HANDLE", $hModule)
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit]
LoadString function
LoadLibrary function
FreeLibrary function
Gruß
Greenhorn
Herzlichen Glückwunsch zu Deinem 18. Geburtstag, name22.
LG
Greenhorn
Hi,
so etwa ? (ungetestet)
extern "Windows-MS"
function Text(byref sText as string) as long export
sText = "Text"
return len(sText)
end function
end extern
$sText = ""
$dll = DllOpen("Test.dll")
$result = DllCall($dll,"long","Text", "str*", $sText)
MsgBox(0,"",StringFormat ("Text: %s\nTextlänge: %d", $sText, $result[0]))
Gruß
Greenhorn
Hier ein Beispiel mit VC 2010 für x86 und x64 ...
Hi,
Kann es echt sein, dass kein Mensch Wünsche, Anregungen, Beschwerden zum Excel UDF hat?
Tja, da kann ich eigentlich nicht viel zu beitragen. Ich beschäftige mich erst seit ca. drei Monaten mit Excel und seit ca. sechs Wochen mit VBA.
Ich versuche immer noch mich an diese hässliche VB-Syntax zu gewöhnen ...
Das ist aber nicht das Problem, sondern der Methoden-Dschungel.
Trotzdem hätte ich eine kleine Anregung.
Ohne jetzt nach einer bereits vorhandenen zu schauen: eine Suchfunktion wäre was tolles.
Also Dateien durchsuchen und in diesen nach Werten in bestimmten Zellen/Bereichen zu suchen.
Wobei auch nach Teilwerten/-strings, Formaten etc. gesucht werden kann.
Gruß
Greenhorn
Hi,
Ich hätte gerne Visual C++ benutzt um ASm einzubauen, da hab ich aber nicht geschafft das Projekt richtig zu konfigurieren, deswegen nun wieder GNU GCC für C++ mit Coed::Blocks ohne ASM.
Für 32bit:
Eigentlich musst Du da nichts in der Konfiguration einstellen.
Inline Assembler
Für 64bit:
MASM for x64 (ml64.exe)
Soweit ich weiß, wird der Konfigurationsdialog für MASM in den Projektoptionen aber nicht angezeigt (Bug).
Da der x64-Compiler kein Inline Assembly mehr verarbeitet, musst Du eben den ASM-Code in separate Module packen.
Hierfür empfehle ich aber eher JWasm, damit ist es wesentlich komfortabler 64bit-Assembler zu schreiben.
Die erforderlichen Dateien um JWasm mit VC zu nutzen sind dabei (Readme lesen!)
Gruß
Greenhorn
ps, im Anhang ein VC Projekt, bei dem der Konfigurationsdialog für den Assembler in den Projektoptionen angezeigt wird (64bit mit WinInc ).
Oder kurz auf den Punkt gebracht: Die Windows Registrierung erfüllt seit Windows NT das was zuvor die INI-Dateien taten.
Windows selbst und fast jedes Programm speicherte seine Einstellungen bis Windows NT in INI-Dateien, was mit der Zeit und jedem Versionssprung zu immer mehr Unübersichtlichkeit führte und immer immer langsamer wurde, da jedesmal die INI ausgelesen werden musste.
Mit Windows NT führte Ms dann eine zentrale, binäre Datei, bzw. mehrere Dateien ein, in der Das OS und Programme ihre Einstellungen speichern konnten.
(Nun ist es doch etwas länger geworden :P, deshalb: Windows-Registrierungsdatenbank)
"Reinigungstools" lohnen sich nicht für die paar kB die man damit spart und haben auf die Performance absolut Null Einfluss.
Ganz im Gegenteil verursachen sie meist mehr Probleme als sie Nutzen bringen.
Grüße
Greenhorn
Um festzustellen, ob ein Programm mehrfach gestartet wurde, benutzt man sicherlich kein Mutex
Das geht schon. Muss allerdings vom Programm selbst geprüft werden...
doppeltes öffnen eines programmes vermeiden
Grüße
Greenhorn
Wie beschrieben, ist es Hardwareabhängig, bzw. für Vista und XP x64 stand die Funktion gar nicht (mehr) zur Verfügung.
Habe es mal grob übersetzt...
ZitatAlles anzeigenVor langer Zeit nutzten alle PCs einen allgemein verbreiteten programmierbaren 8254 Interval-Timer-Chip, um primitive Klänge zu erzeugen. Die Beep-Funktion wurde eigens dazu geschrieben, um einen „Beep“ auf dieser Hardware auszugeben.
Auf diesen älteren Systemen hatten Stummschalt- und Lautstärkesteuerungen keinen Einfluss auf Beep; der Ton war trotzdem zu hören. Um den Ton stumm zu schalten, wurden folgende Kommandos benutzt:
net stop beep
sc config beep start= disabled
Seit dem wurden Soundkarten zum Standardequipment in den meisten PCs. Als Soundkarten allgemein üblich wurden, begannen die Hersteller den alten Timer-Chip von den PCs zu entfernen. Die Chips wurden ebenso von dem Design der Servercomputer ausgeschlossen. Das Resultat war, dass Beep ohne diesen Chip nicht auf allen Computern funktionierte. Dies war Okay, denn die meisten Entwickler gingen dazu über die Funktion MessageBeep aufzurufen, die das Standard-Sound-Gerät benutzt, welches auch immer das ist, anstatt des 8254-Chips.
Schließlich wurde, wegen des Fehlens der Hardware zur Kommunikation, die Unterstützung der Funktion Beep in Windows Vista und Windows XP 64-Bit Edition fallengelassen.
In Windows 7 wurde Beep neu geschrieben, um Beep an das Standard-Sound-Gerät für die Sitzung zu reichen. Dies ist normalerweise die Soundkarte, außer wenn die Sitzung unter Terminal-Services läuft, in diesem Fall wird Beep auf dem Client wiedergegeben.
Greenhorn
Hier mal der Originaltext zur Funktion:
ZitatAlles anzeigenA long time ago, all PC computers shared a common 8254 programable interval timer chip for the generation of primitive sounds. The Beep function was written specifically to emit a beep on that piece of hardware.
On these older systems, muting and volume controls have no effect on Beep; you would still hear the tone. To silence the tone, you used the following commands:
net stop beep
sc config beep start= disabled
Since then, sound cards have become standard equipment on almost all PC computers. As sound cards became more common, manufacturers began to remove the old timer chip from computers. The chips were also excluded from the design of server computers. The result is that Beep did not work on all computers without the chip. This was okay because most developers had moved on to calling the MessageBeep function that uses whatever is the default sound device instead of the 8254 chip.
Eventually because of the lack of hardware to communicate with, support for Beep was dropped in Windows Vista and Windows XP 64-Bit Edition.
In Windows 7, Beep was rewritten to pass the beep to the default sound device for the session. This is normally the sound card, except when run under Terminal Services, in which case the beep is rendered on the client.
Auch von mir die besten Glückwünsche !
Genieße den Tag und lass Dich feiern.
Grüße
Greenhorn
Freue mich auch hier dabei zu sein.
Ich hoffe das Forum und seine Gemeinde bleiben uns in dieser Form lange erhalten.
Grüße
Greenhorn
Also, ich habe mir den Code von _GUICtrlComboBox_GetEditText mal angesehen...
Gary hat es ein wenig merkwürdig umgesetzt (mit SendMessage), obwohl es trotz alledem funktionieren müsste. Und das tut es ja bei mir auch.
Der Puffer, den er erzeugt, ist größer als nötig. Da AutoIt bei DllStructCreate den Speicher aber mit Nullzeichen füllt, muss es eigentlich funktionieren.
Aber wie man sieht tut es das bei Dir nicht und bei einigen Anderen anscheinend auch nicht.
Eigentlich hatte ich dieses Problem z.B. nur, wenn ich ANSI- und Unicode-Funktionen gemischt hatte.
Vielleicht ist bei Deinem Update auch irgendetwas schief gelaufen. Evtl hilft es alles sauber zu deinstallieren und AutoIt noch einmal neu zu installieren.
Wie sieht bei Dir denn die Funktion _GUICtrlComboBox_GetEditText aus ?
Wie auch immer, probiere es doch bitte einmal mit GetWindowText, so macht es das originale Makro ComboBox_GetText aus den Windows-Headern auch.
; Puffer für den Text
Global $sTextA4
; In die Schleife packen und _GUICtrlComboBox_GetEditText auskommentieren
GetWindowText ($A4, $sTextA4, 260)
MsgBox(...)
;...
Func GetWindowText ($hWnd, ByRef $sString, $nMaxCount)
[/autoit] [autoit][/autoit] [autoit]Local $type = 'wstr'
If (IsPtr ($sString)) Then _
$type = 'ptr'
Local $aRes = DllCall ("user32.dll", 'int', 'GetWindowTextW', _
'HWND', $hWnd, _
$type , $sString, _
'int' , $nMaxCount)
If @error Then _
Return @error
If (not IsPtr ($sString)) Then _
$sString = $aRes[2]
Return $aRes[0]
EndFunc
[/autoit]Greenhorn
Hi,
$iTextLen = GetWindowTextLength (GUICtrlGetHandle ($h_Edit))
[/autoit] [autoit][/autoit] [autoit]SendMessage ($hwndEdit, $EM_SETSEL, $iTextLen, $iTextLen)
[/autoit] [autoit][/autoit] [autoit]Func GetWindowTextLength ($hWnd)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($user32dll, "int", "GetWindowTextLength", _
"HWND", $hWnd)
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func SendMessage ($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($user32dll, 'ULONG', 'SendMessageW', _
'HWND' , $hWnd, _
'UINT' , $Msg, _
'WPARAM', $wParam, _
'LPARAM', $lParam)
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit]Grüße
Greenhorn
Hi,
besser bekomme ich es nicht hin...
Mann, ist das ein besch...er Text.
Gute fünf Stunden dafür gebraucht...
Bitte Satzzeichen kontrollieren!
EDIT:
Noch etwas: Der Satz "Application defined value associated with the button" im Originaltext unter tmWeight gehört dort nicht rein !!!
Grüße
Greenhorn
Edit: Zu $tagTEXTMETRIC.txt: Hat jemand eine Ahnung wie ich "specifies the height (ascent + descent) of characters." übersetzen soll? Eigentlich sollte der deutsche Begriff für "ascent" ja Oberlänge sein, aber scheinbar ist im englischen damit die Mittellänge + die Oberlänge gemeint (sonst würde man nicht auf die volle Höhe der Buchstaben kommen) :S.
Hi name22,
autoit.de/wcf/attachment/16084/
Grüße
Greenhorn