Jag försöker minimera mitt program och den kod som jag har hittat som ska lösa det är: Löste det själv. Det är tydligen viktigt att skicka värden som ByVal och inte ByRef :-) Ja, CF: Minimera program
<code>
[System.Runtime.InteropServices.DllImport("coredll.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdshow);
private static readonly int SW_MINIMIZE = 6;
private void button1_Click(object sender, EventArgs e)
{
ShowWindow(Handle,SW_MINIMIZE);
}
</code>
Jag har översatt det till VB.NET och fått fram:
<code>
<System.Runtime.InteropServices.DllImport("coredll.dll")> Private Shared Function ShowWindow(ByRef hWnd As IntPtr, ByRef nCmdShow As Integer) As Boolean
End Function
Const SW_MINIMIZED As Integer = 6
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ShowWindow(Me.Handle, SW_MINIMIZED)
End Sub
</code>
Men det fungerar inte. Ingenting händer när jag klickar på knappen.
Har jag översatt koden fel eller är originalkoden inte rätt?
/ThomasSv: CF: Minimera program
/ThomasSv:CF: Minimera program
Eftersom du ramlar in i unmanagedvärlden så är det en jätteskillnad. Skickar du med byref så innebär det att du skickar en pekare, alltså en address, som parameter. Om api'et då förväntar sig ett värde och inte en pekare så kommer den att tolka addressen som det värde du ville ange. Inte helt lyckat ;)