<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich versuche, ein Skript zu schreiben, um die Leistung für Split-Unit-Designs im Custom Designer und Design Evaluator korrekt zu berechnen.Das Problem besteht darin, dass nicht die richtigen Freiheitsgrade verwendet werden und diese jetzt zwar geändert werden können, aber jedes Mal, wenn die Freiheitsgrade oder das Signal-Rausch-Verhältnis geändert werden, werden die Umrissfelder für die Leistungsanalyse ausgeblendet und es fallen viele unnötige Schaltflächenklicks an An.Außerdem kann ich nicht bestimmen, wie der Nichtzentralitätsparameter für Split-Unit-Designs berechnet wird, sodass ich nicht einfach ein Skript schreiben kann, um die Berechnungen von Grund auf durchzuführen.In JMP 10 ist der Nichtzentralitätsparameter eine versteckte Spalte in der Leistungsanalyse, die ich als Matrix abrufen kann.
Ich möchte in der Lage sein, ein Skript zu schreiben, das ein Benutzer im Custom Designer oder Design Evaluator ausführen kann, und es die Leistung für ihn berechnen zu lassen, indem es mehrere Signal-Rausch-Verhältnisse gleichzeitig verwendet.Dazu muss mein Skript in der Lage sein, das Signal-Rausch-Verhältnis in der JMP-Plattform zu ändern und CD oder DE den NCP neu berechnen zu lassen.
Ich kann den NumberColEditBox-Wert ändern, aber ich kann die Plattform nicht dazu bringen, NCP neu zu berechnen.
win = Window("DOE - Custom Design"); // Stellt zu Testzwecken eine Verbindung zum Fenster her
win[OutlineBox(15)] << Close(0); //Dies ist das Übersichtsfeld der Leistungsanalyse
win[NumberColBox(9)] << Hide(0); //Dies ist die NCP-Spalte
ncp1 = win[NumberColBox(9)] << Get as Matrix; //Speichert die NCP-Spalte
win[NumberColEditBox(4)] << SetValues([4]); //Dies ändert den Wert des Signal-Rausch-Verhältnisses im Feld auf 4
Wie kann ich einen Eingabetastendruck simulieren, damit die Plattform eine Neuberechnung durchführt?
Ich werde feststellen, dass nichts passiert, wenn ich den Wert im Feld im Skript ändere, einfach in das Feld klicke und die Eingabetaste drücke.Wenn ich dann die Nummer eingebe, in die ich sie gerade geändert habe, und die Eingabetaste drücke, passiert nichts.Wenn ich dann eine andere Nummer eingebe, funktioniert es einwandfrei.(Diese Sequenz wäre wie folgt: win[NumberColEditBox(4)] << SetValues([4]); drücken Sie die Eingabetaste, nichts -> Geben Sie 4 in das Feld ein, drücken Sie die Eingabetaste, nichts -> Geben Sie 3 in das Feld ein, drücken Sie die Eingabetaste, funktioniert)
Einige Beispielnudeln mit Tastendruckfunktion – Windoze keybd_event-Funktion mit VK_RETURN
Hoffe das hilft.
Am besten,
-Matt
// keypress_example.jsl
// Matt Flynn -
// Vorsicht beim Experimentieren mit Tasten – kann interessant werden
// http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx
VK_ESCAPE = Hex to Number( "0000001B" );
VK_H = Hex to Number( "00000048" );
VK_E = Hex to Number( "00000045" );
VK_L = Hex to Number( "0000004C" );
VK_O = Hex to Number( "0000004F" );
VK_F = Hex to Number( "00000046" );
VK_R = Hex to Number( "00000052" );
VK_M = Hex to Number( "0000004D" );
VK_J = Hex to Number( "0000004A" );
VK_M = Hex to Number( "0000004D" );
VK_P = Hex to Number( "00000050" );
VK_SPACE = Hex to Number( "00000020" );
VK_SHIFT = Hex to Number( "00000010" );
VK_RETURN = Hex to Number( "0000000D" );
VK_1 = Hex to Number( "00000031" );
KEYEVENTF_EXTENDEDKEY = Hex zu Zahl( "00000001" ); //&H1
KEYEVENTTF_KEYDOWN = 0;
KEYEVENTF_KEYUP = Hex to Number( "00000002" ); //&H2
kernel32 = Dll laden( "kernel32" );
kernel32 << DeclareFunction( "Sleep", Convention( STDCALL ), Alias( "Sleep" ),
Arg( Int32, "dwMilliseconds" ),
Returns( Void ) ); //Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
user32 = Dll laden( "User32" );
user32 << DeclareFunction( "FindWindowA", Convention( STDCALL ), Alias( "FindWindow2" ),
Arg( UInt32, input, "lpClassName" ),
Arg( AnsiString( 200 ), input, "lpCaption" ),
Gibt zurück (UIntPtr)
); // hWnd
user32 << DeclareFunction( "SetForegroundWindow", Convention( STDCALL ), Alias( "SetForegroundWindow" ),
Arg( UIntPtr, "hWnd" ),
Gibt zurück (UInt32)
);
user32 << DeclareFunction( "keybd_event", Convention( STDCALL ), Alias( "keybd_event" ),
Arg( UInt8, "bVk" ), //[in] Gibt einen virtuellen Schlüsselcode an. Der Code muss ein Wert im Bereich von 1 bis 254 sein. Eine vollständige Liste finden Sie unter Virtuelle Schlüsselcodes.
Arg( UInt8, "bScan" ),
Arg( UInt32, "dwFlags" ),
Arg( UIntPtr, "dwExtraInfo" ),
Returns( Void ) );
user32 << DeclareFunction( "GetKeyState", Convention( STDCALL ), Alias( "GetKeyState" ),
Arg( Int32, "nVirtKey" ), //[in] Gibt einen virtuellen Schlüssel an. Wenn der gewünschte virtuelle Schlüssel ein Buchstabe oder eine Ziffer ist (A bis Z, a bis z oder 0 bis 9), muss nVirtKey auf den ASCII-Wert dieses Zeichens gesetzt werden. Bei anderen Schlüsseln muss es sich um einen virtuellen Schlüsselcode handeln.
Returns( Int32 ) ); //Der Rückgabewert gibt den Status des angegebenen virtuellen Schlüssels wie folgt an:
//Wenn das höherwertige Bit 1 ist, ist der Schlüssel unten; andernfalls ist es oben.
//Wenn das niederwertige Bit 1 ist, wird die Taste umgeschaltet. Eine Taste, beispielsweise die FESTSTELLTASTE, wird umgeschaltet, wenn sie aktiviert ist. Die Taste ist ausgeschaltet und nicht umgeschaltet, wenn das niederwertige Bit 0 ist. Die Anzeigeleuchte einer Umschalttaste (falls vorhanden) auf der Tastatur leuchtet, wenn die Taste umgeschaltet wird, und erlischt, wenn die Taste nicht umgeschaltet wird.
shell32 = Dll laden( "shell32" );
shell32 << DeclareFunction( "ShellExecuteA", Convention( STDCALL ), Alias( "ShellExecute" ),
Arg( UIntPtr, input, "hWnd" ),
Arg( AnsiString( 20 ), "lpOperation" ),
Arg( AnsiString( 256 ), "lpFile" ),
Arg( AnsiString( 256 ), "lpParameters" ),
/* Arg( UInt32, "lpParameters" ), */
Arg( UInt32, "lpDirectory" ),
Arg( UInt32, "nShowCmd" ),
Gibt zurück (UInt32)
); //Wenn die Funktion erfolgreich ist, gibt sie einen Wert größer als 32 zurück.
Textdatei speichern( "C:\temp\deleteme.txt", "'Hello World' from JMP" );
dirname = "C:\temp";
fname = "C:\temp\deleteme.txt";
// im Editor öffnen
rc = shell32 << ShellExecute( 0, "Open", "notepad.exe", " ", 0, 1 );
lpCaption = "Untitled - Notepad";
rc = kernel32 << Sleep( 2 ); // Pause, um den Notizblock zu öffnen
// in Excel öffnen
//rc = shell32 << ShellExecute( 0, "Open", "Excel.exe", " ", 0, 1 );
//lpCaption = "Microsoft Excel – Buch1";
// warte auf Öffnen
rc = kernel32 << Sleep( 200 ); // Pause, um den Editor zu öffnen
hWnd = user32 << FindWindow2( 0, lpCaption );
rc = user32 << SetForegroundWindow( hWnd );
key = function( { l_key },
user32 << keybd_event( l_key, 0, 0, 0 ); // drücken Sie die Taste
user32 << keybd_event( l_key, 0, KEYEVENTF_KEYUP, 0 ); // Taste loslassen
);
user32 << keybd_event( VK_SHIFT, 0, 0, 0 ); // drücken Sie die Taste
Schlüssel( VK_H );
user32 << keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 ); // Taste loslassen
Schlüssel( VK_E );
Schlüssel( VK_L );
Schlüssel( VK_L );
key( VK_O );
Schlüssel( VK_SPACE );
Schlüssel( VK_F );
Schlüssel( VK_R );
key( VK_O );
Schlüssel( VK_M );
Schlüssel( VK_SPACE );
user32 << keybd_event( VK_SHIFT, 0, 0, 0 ); // drücken Sie die Taste
Schlüssel( VK_J );
Schlüssel( VK_M );
Schlüssel( VK_P );
Schlüssel( VK_1 );
user32 << keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 ); // Taste loslassen
Schlüssel( VK_RETURN );
user32 << UnloadDll( );
shell32 << UnloadDll( );
kernel32 << UnloadDll( );