2

これで、Windowsフォームを介してユーザーの資格情報を取得するプログラムがあります。現在、メッセージボックスを介してユーザー入力を表示しています。これをコンソールアプリケーションに渡して、ユーザーが正しい資格情報を入力した場合に、その後、コンソールアプリケーションで続行されますが、これを行うにはどうすればよいですか?

4

4 に答える 4

1

コンソールアプリケーションでtxtファイルを探すためにwhileループを追加する必要があるかもしれません。Windowsフォームアプリケーションでは、成功または失敗のメッセージをtxtファイルに書き込むことができます。(セキュリティのために暗号化を追加します)情報を書き留めた瞬間に、コンソールアプリはそれを読み取り、そこから続行する必要があります。

Algorithm:
1.console application start
2. console app while loop until txt file detected
3. forms app show input screen
4. user enter credential
5. write success or failure into txt file
6. read txt file
7. continue based on credential result
8. Remove txt file

フォームはコンソールアプリプロジェクトにも含まれているため(私はあなたの言葉遣いから推測します)、次のことができます

class Program
{
    public static object abc;
    static void Main(string[] args)
    {
        //do something here if required
        Form1 frm = new Form1();
        if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            //login success do what ever on success
            Console.WriteLine("Login success");
            Console.WriteLine(abc.ToString());
        }
        else
        {
            Console.WriteLine("Login failure");
            Console.WriteLine(abc.ToString());
            //login failure
        }
        Console.ReadLine();
    }
}

ログインフォームクラスのログインボタンクリックイベント

 private void Login_Click(object sender, EventArgs e)
    {
        if(true)
        {
            Program.abc = "any success object here";
            //on successful login
        this.DialogResult= System.Windows.Forms.DialogResult.OK;
        }
        else
        {
            Program.abc = "any failure object here";
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        }
    }

ありがとう、

エセン

于 2012-06-08T15:11:30.607 に答える
0

フォームアプリ内でwcfサービスをホストできます。次に、コンソールアプリをクライアントにします。wcfを使用すると、サービス指向システムの作成が驚くほど簡単になります。チュートリアルについては、こちらをご覧ください。このアプローチに従うと、多くのことを学ぶことができます

于 2012-06-08T15:14:58.220 に答える
0

名前付きパイプでIPC(プロセス間通信)を使用します。2つのプロセス間で簡単に実装できます。http://msdn.microsoft.com/en-us/library/bb546085.aspxを確認してください。

于 2012-06-08T15:19:04.057 に答える
0

基本的に、おそらくいくつかのネイティブWindows API関数(Alloc / FreeConsole)を使用し、WinFormsコントローラーを使用する必要があります。

セミ擬似コード:

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool AllocConsole();

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool FreeConsole();

//--- form code
if (Do_validation() && AllocConsole())
{
    this.Hide();
    this.ShowInTaskbar = false;
    Enter_Console_Code();
    FreeConsole();
    System.Threading.Thread.Sleep(50); //FreeConsole sometimes doesn't finish closing straight away which means your form flickers to the front and then minimizes.
    this.ShowInTaskbar = true;        
    this.Show(); 
}
//---

private void Enter_Console_Code()
{ 
    string line = string.Empty;
    while ((line = Console.ReadLine()) != "q")
        Console.WriteLine(line); //pointless code ftw!
}

基本的に、このコードは「GUI」検証ステップを実行し、それが成功すると、アプリケーションにコンソールを割り当てようとします。コンソールが割り当てられると、GUIを完全に非表示にし、新しいコンソールのみを表示することで「コンソールモード」に入ります(コンソールを閉じると、アプリケーションが閉じます)。「コンソールモード」コードが実行された後、コンソールが閉じられ、GUIが戻ります。

于 2012-06-08T16:37:59.673 に答える