Fremdes Programm steuern mit win api/spy++ alternative

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Fremdes Programm steuern mit win api/spy++ alternative

    hey,

    hab seit langem mal wieder ein projekt in angriff genommen. ich habe ein programm gefunden(standalone, keine dll´s) womit ich zich infos von nvdidia grafikkarten auslesen kann u.a. auch die temperatur der gpu und die geschwindigkeit des lüfters frei regeln kann. dahe die gpu dank 35% lüfterspeed immer bei knapp 60°C rumpendelt im idle wollte ich ein programm machen dass das tool mimiert startet und dann per api versteckt(das fenster). dann soll es laufend die gpu temp auslesen und jenachdem den lüfterspeed anpassen. schon mit 55% ist die gpu bei 47°C und das ist immernoch kaum hörbar. es gab hier im showroom(?) glaub ich mal ne spy++ alternative ich hab nur den namen vergessen. daher meine eigentliche frage: welche spy++ alternativen gibt es

    2te möglichkeit:

    in seinem blog eintrag schrieb er dass das alles über den nvidia treiber abläuft d.h. könnte man das doch auch theoretisch per vb(halt mit admin rechten) direkt ansteuern oder?
    wenn ja, wie?

    mfg,
    kinsi

    edit:

    hab mal bissl gesucht und das hier gefunden:
    Seit Einführung der 200er-Treiberserie ermöglicht Nvidia den Entwicklern von Fremdtools, komfortabel über eine Schnittstelle namens NVAPI auf nach außen exportierte Treiberfunktionen zuzugreifen und Einstellungsänderungen wohldefiniert zu übergeben.


    verweist auf ne seite von nvidia:
    developer.nvidia.com/nvapi

    echt nice werd mich mal bissl reinarbeiten. vllt interessierts hier ja sonst noch jemanden ^^

    edit2:
    okay wie ich sehe ist die api anscheinend für c++(?) gibts irgent ne möglichkeit die per vb anzusprechen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    Nun wenn man den Code von C++ nicht nach VB umsetzten kann, was meist schwierig ist, weils ja komplett anders ist, würde ich einfach eine Wrapper DLL in C++ erstellen wodrin einfach die Funktionen zur verfügung stellst die du benötigst und in denen dann der C++ Code ausgeführt wird.
    mhm hab noch nie mit c++ gearbeitet kenns nur mehr oder weniger vom syntax her, isses schwierig? bzw wenn du c++ kannst könntest du mir den wrapper schreiben?(ja ich weiss das grenzt an c&p aber was will man machen^^)

    edit:
    müsste dann ja noch die ide für c++ laden..
    Ich habs mir mal angesehen und verstehen tue ichs auch nicht, zumal ich da kaum Funktionen sehe die wirklich was machen O.o
    Ich könnte einfach mal versuchen das Projekt zu compilieren. Aber um es VB Kompatibel zu machen müsste man das genauer verstehen. Ich habe schon ein paar Wrapper DLLs geschrieben, aber die waren alle einfacherer. Dort habe ich lediglich die Parameter angepasst die den Funktionen übergeben werden, manche lassen sich in VB schlecht nachempfinden, besonders so manche komische Strukturen die in C++ möglich sind.

    Edit: hmm ne habe dann doch wohl zu wenig Ahnung wie ich die Dateien compilieren könnte =/
    danke schonmal

    naja auf der nvidia page gibs ja mehr oder weniger ne doku als pdf:

    developer.download.nvidia.com/…G-5116-001_v02_public.pdf

    vllt hilft dir die ja weiter. im prinzip brauche ich nur die aktuelle lüftergeschwindikeit als %, die gpu temp als °C und muss den lüfterspeed setzen d.h. müssten dass ja eigentlich 3 funktionen sein

    ansonsten zur lib kann ich dir ja wie gesagt leider nicht viel helfen
    habs getestet, lüftergeschwindigkeit der graka ändert sich ned, speedfan kann u.a. auch ned den lüfter steuern

    VB.NET-Quellcode

    1. Try
    2. Dim classInstance As New ManagementObject("root\CIMV2", "Win32_Fan", Nothing)
    3. ' Obtain [in] parameters for the method
    4. Dim inParams As ManagementBaseObject = classInstance.GetMethodParameters("SetSpeed")
    5. ' Add the input parameters.
    6. inParams("DesiredSpeed") = 200
    7. ' Execute the method and obtain the return values.
    8. Dim outParams As ManagementBaseObject = classInstance.InvokeMethod("SetSpeed", inParams, Nothing)
    9. ' List outParams
    10. MsgBox("Out parameters:")
    11. MsgBox("ReturnValue: {0}", outParams("ReturnValue"))
    12. Catch err As ManagementException
    13. MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
    14. End Try


    inenr ersten zeile gibtsn fehler dass der path ned gefunden wurde halt
    lade dir WMI Creator runter, der generiert dir Code für Console Anwendung, wenn funz kannst für form anwendung umschreiben.
    Übrigens in diesem forum steht schon beschrieben nach welche klasse muß du suchen:
    foren.activevb.de/cgi-bin/fore…390329&root=390329&page=1
    da du sicher nach C&P gesucht hast, kann ich dir nicht mehr weiter helfen, in links steht alles beschrieben.
    Ob diese WMI Klasse bei deine Grafikkarte funz, muß du testen.
    vbarchiv.net/tipps/tipp_2247.html
    &
    http://msdn.microsoft.com/en-us/library/aa393599(VS.85).aspx
    &

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Management
    3. Imports System.Windows.Forms
    4. Namespace WMISample
    5. Public Class CallWMIMethod
    6. Public Overloads Shared Function Main() As Integer
    7. Try
    8. Dim classInstance As New ManagementObject( _
    9. "root\CIMV2", _
    10. "Win32_Fan", Nothing)
    11. ' Obtain [in] parameters for the method
    12. Dim inParams As ManagementBaseObject = _
    13. classInstance.GetMethodParameters("SetSpeed")
    14. ' Add the input parameters.
    15. inParams("DesiredSpeed") = 200
    16. ' Execute the method and obtain the return values.
    17. Dim outParams As ManagementBaseObject = _
    18. classInstance.InvokeMethod("SetSpeed", inParams, Nothing)
    19. ' List outParams
    20. Console.WriteLine("Out parameters:")
    21. Console.WriteLine("ReturnValue: {0}", outParams("ReturnValue"))
    22. Catch err As ManagementException
    23. MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
    24. End Try
    25. End Function
    26. End Class
    27. End Namespace
    entweder du machst es wie Dodo gesagt hast, oder du machst dir deinen eigenen Wrapper für die API, dazu kannst du die nvapi.h, NvApiDriverSettings.h und NvApiDriverSettings.c in VB.Net Code übersetzen, ich denke aber die erste möglichkeit ist die einfachere...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---