�@

.NET TIPS

���d�N���֎~���Ɏ��s����Windows�A�v���P�[�V�������őO�ʂɕ\������ɂ́H

�f�W�^���A�h�o���e�[�W
2004/04/23

�@�ʍe�uTIPS�FWindows�A�v���P�[�V�����̑��d�N�����֎~����ɂ́H�v�ŁA�܂���������Windows�A�v���P�[�V�����𓯎��ɕ����N������̂��֎~������@���Љ���B���̕��@�ł́A���łɓ���Windows�A�v���P�[�V���������s���̏ꍇ�A2�Ԗڈȍ~�ɋN�����悤�Ƃ���Windows�A�v���P�[�V�����͌x�����b�Z�[�W��\�����ďI������悤�ɂ��Ă���B�������A���̌x�����b�Z�[�W�̑���ɁA���łɎ��s���̃A�v���P�[�V�������őO�ʂɕ\�����������A���e�؂Ń��[�U�r���e�B�������Ƃ�����B�{�e�ł͂��̎������@�ɂ‚��ĉ������B

���s����Windows�A�v���P�[�V�������őO�ʂɕ\��������@�ɂ‚���

�@���s����Windows�A�v���P�[�V�������őO�ʂɕ\������ɂ́A���̃E�B���h�E���A�N�e�B�u������K�v������B������s���ɂ́A�ʏ�Ȃ��Windows�t�H�[���ł���Form�I�u�W�F�N�g�iSystem.Windows.Forms���O��ԁj��Activate���\�b�h���Ăяo���΂悢���A���d�N������Windows�A�v���P�[�V�����̂悤�ȁA�ʃv���Z�X�̃E�B���h�E�ɑ΂��ẮA���̃��\�b�h�����p�ł��Ȃ��B

�@�����ŁA�ʃv���Z�X��Windows�A�v���P�[�V�������őO�ʂɕ\�����邽�߂ɁAWin32 API��SetForegroundWindow�֐����g�p����B�܂��AWindows�A�v���P�[�V�������u�ŏ����v����Ă���ꍇ�ɂ́A������u���ɖ߂��āv����őO�ʂɕ\����������D�܂����B���́u�ŏ����v����Ă��邩�ǂ����𔻒肷�邽�߂ɂ�Win32 API��IsIconic�֐����A�u���ɖ߂��v���߂�ShowWindowAsync�֐����g�p����B�Ȃ��A.NET�v���O��������Win32 API���Ăяo�����@�ɂ‚��ẮA�ʍe�uTIPS�FWin32 API��DLL�֐����Ăяo���ɂ́H�v���Q�Ƃ��Ă������������B

�@Win32 API���g�����E�B���h�E���őO�ʂɂ��鏈�����A���Ɏ���WakeupWindow���\�b�h�ɂ܂Ƃ߂��B���̃��\�b�h�́A���C���E�E�B���h�E�̃n���h���i�E�B���h�E�����ʂ��邽�߂̔ԍ��j���p�����[�^�Ɏw�肷��d�l�ɂȂ��Ă���B

// �O���v���Z�X�̃E�B���h�E���N������
public static void WakeupWindow(IntPtr hWnd)
{
  // ���C���E�E�B���h�E���ŏ�������Ă���Ό��ɖ߂�
  if (IsIconic(hWnd))
  {
    ShowWindowAsync(hWnd, SW_RESTORE);
  }

  // ���C���E�E�B���h�E���őO�ʂɕ\������
  SetForegroundWindow(hWnd);
}
// �O���v���Z�X�̃��C���E�E�B���h�E���N�����邽�߂�Win32 API
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd,int nCmdShow);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);
// ShowWindowAsync�֐��̃p�����[�^�ɓn����`�l
private const int SW_RESTORE = 9;  // ��ʂ����̑傫���ɖ߂�
�ʃv���Z�X��Windows�A�v���P�[�V�������őO�ʂɕ\�����郁�\�b�h�iC#�j
�@
' �O���v���Z�X�̃E�B���h�E���N������
Public Shared Function WakeupWindow(ByVal hWnd As IntPtr)
  ' ���C���E�E�B���h�E���ŏ�������Ă���Ό��ɖ߂�
  If IsIconic(hWnd) Then
    ShowWindowAsync(hWnd, SW_RESTORE)
  End If

  ' ���C���E�E�B���h�E���őO�ʂɕ\������
  SetForegroundWindow(hWnd)
End Function
' �O���v���Z�X�̃��C���E�E�B���h�E���N�����邽�߂�Win32 API
<DllImport("user32.dll")> _
Private Shared Function _
  SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
End Function
<DllImport("user32.dll")> _
Private Shared Function _
  ShowWindowAsync(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
End Function
<DllImport("user32.dll")> _
Private Shared Function _
  IsIconic(ByVal hWnd As IntPtr) As Boolean
End Function
' ShowWindowAsync�֐��̃p�����[�^�ɓn����`�l
Private Const SW_RESTORE As Integer = 9 ' ��ʂ����̑傫���ɖ߂�
�ʃv���Z�X��Windows�A�v���P�[�V�������őO�ʂɕ\�����郁�\�b�h�iVB.NET�j

�@���̃��\�b�h���g���΁A�ʃv���Z�X��Windows�A�v���P�[�V�������őO�ʂɕ\���ł���B���������̃��\�b�h�����s����ɂ́A���\�b�h�̃p�����[�^�ɕʃv���Z�X�̃��C���E�E�B���h�E�̃n���h�����w�肷��K�v������B����Ď��ɁA���s���̕ʃv���Z�X���擾������@��������悤�B

���s���̕ʃv���Z�X�̎擾

�@�ʃv���Z�X���擾����ɂ́AProcess�N���X�iSystem.Diagnostics���O��ԁj��GetProcessesByName���\�b�h���g���āA���ł� ���s���Ă���Windows�A�v���P�[�V�����i�������g�j�Ɠ����v���Z�X�����������v���Z�X���擾����B�Ȃ��AGetProcessesByName���\�b�h�͌��ݎ��s���̃v���Z�X�i�������g�j���擾���Ă��܂��̂ŁA�v���Z�XID���`�F�b�N���Ď������g�̃v���Z�X�͔r�����A�ʃv���Z�X�݂̂��擾����K�v������B

�@�������A���ꂾ���ł͓����v���Z�X�����������܂������ʂ̃v���Z�X�ł���ꍇ�����蓾��̂ŁA�����Process�N���X��MainModule.FileName�v���p�e�B����A���̃v���Z�X�̃t���p�X�����擾���āA�������g�̂���Ɣ�r���Ȃ���΂Ȃ�Ȃ��B

�@�����̏������܂Ƃ߂��̂��A����GetPreviousProcess���\�b�h�ł���B���̃��\�b�h�́A�ʃv���Z�X��߂�l�Ƃ��ĕԂ��d�l�ɂȂ��Ă���B

// ���s���̓����A�v���P�[�V�����̃v���Z�X���擾����
public static Process GetPreviousProcess()
{
  Process curProcess = Process.GetCurrentProcess();
  Process[] allProcesses = Process.GetProcessesByName (curProcess.ProcessName);

  foreach (Process checkProcess in allProcesses)
  {
    // �������g�̃v���Z�XID�͖�������
    if (checkProcess.Id != curProcess.Id)
    {
      // �v���Z�X�̃t���p�X�����r���ē����A�v���P�[�V����������
      if (String.Compare(
          checkProcess.MainModule.FileName,
          curProcess.MainModule.FileName, true) == 0)
      {
        // �����t���p�X���̃v���Z�X���擾
        return checkProcess;
      }
    }
  }

  // �����A�v���P�[�V�����̃v���Z�X�����‚���Ȃ��I
  return null;
}
�ʃv���Z�X���擾���郁�\�b�h�iC#�j
�@
' ���s���̓����A�v���P�[�V�����̃v���Z�X���擾����
Public Shared Function GetPreviousProcess() As Process
  Dim curProcess As Process = Process.GetCurrentProcess()
  Dim allProcesses() As Process = Process.GetProcessesByName(curProcess.ProcessName)

  Dim checkProcess As Process
  For Each checkProcess In allProcesses
    ' �������g�̃v���Z�XID�͖�������
    If checkProcess.Id <> curProcess.Id Then
      ' �v���Z�X�̃t���p�X�����r���ē����A�v���P�[�V����������
      If String.Compare( _
          checkProcess.MainModule.FileName, _
          curProcess.MainModule.FileName, True) = 0 Then
        ' �����t���p�X���̃v���Z�X���擾
        Return checkProcess
      End If
    End If
  Next

  ' �����A�v���P�[�V�����̃v���Z�X�����‚���Ȃ��I
  Return Nothing
End Function
�ʃv���Z�X���擾���郁�\�b�h�iVB.NET�j

�@�ȏ��2�‚̃��\�b�h���g���΁A���s���̕ʃv���Z�X�̃��C���E�E�B���h�E���őO�ʂɕ\�����邱�Ƃ��ł���B

���d�N���֎~���Ɏ��s����Windows�A�v���P�[�V�������őO�ʂɕ\������T���v��

�@��̓I�ɂ́A���̂悤��GetPreviousProcess���\�b�h���g���ĕʃv���Z�X���擾���A���̃v���Z�X�̃��C���E�E�B���h�E�E�n���h���iMainWindowHandle�v���p�e�B�j���p�����[�^�Ɏw�肵��WakeupWindow���\�b�h���Ăяo���΂悢�B

Process prevProcess = GetPreviousProcess();
if (prevProcess != null) {
  WakeupWindow(prevProcess.MainWindowHandle);
}

�@���̏������uTIPS�FWindows�A�v���P�[�V�����̑��d�N�����֎~����ɂ́H�v�̃T���v���E�v���O�����ɑg�ݍ��񂾉����ł̃T���v���E�v���O�������ȉ��ɗp�ӂ����B

  • �T���v���E�v���O�����iC#�Fwinshow.cs�j�̃_�E�����[�h
  • �T���v���E�v���O�����iVB.NET�Fwinshow.vb�j�̃_�E�����[�h

�@�Ȃ��AWindows XP��Fast User Switching�@�\�ɂ�镡���̃��[�U�[�‹��������Ɏ��s����Ă���Ƃ��̑��d�N���֎~�̏ꍇ�i�‚܂�A�O���[�o���E�~���[�e�b�N�X�ɂ��G���[�̏ꍇ�j�A���R�Ȃ���ʃ��[�U�[�‹���Windows�A�v���P�[�V�������őO�ʂɕ\�����邱�Ƃ͂ł��Ȃ��B����āA�O���[�o���E�~���[�e�b�N�X�̃G���[�ɂ��x�����b�Z�[�W��WakeupWindow���\�b�h�ɒu�����������̂܂܂ɂ��Ă����A�O���[�o���E�~���[�e�b�N�X�ȊO�̑��d�N���̏ꍇ����WakeupWindow���\�b�h���Ăяo�������]�܂����B��قNj������T���v���E�v���O�����͂��̂悤�Ɏ������Ă���BEnd of Article

�J�e�S���FWindows�t�H�[���@�����ΏہF�X���b�h
�g�p���C�u�����FForm�N���X�iSystem.Windows.Forms���O��ԁj
�g�p���C�u�����FProcess�N���X�iSystem.Diagnostics���O��ԁj
�֘ATIPS�FWindows�A�v���P�[�V�����̑��d�N�����֎~����ɂ́H
�֘ATIPS�FWin32 API��DLL�֐����Ăяo���ɂ́H
�@
���̋L���Ɗ֘A���̍����ʂ�.NET TIPS
�v���Z�X���𖼑O����Ɏ擾����ɂ́H
�f�X�N�g�b�v��̂��ׂẴ��C���E�E�B���h�E��񋓂���ɂ́H
�O���v���O�������s���ɏ������ł܂�ꍇ�ɂ́H
�E�B���h�E����ɍőO�ʂɕ\������ɂ́H
DataGrid�R���g���[�����g�p�����t�H�[������ɍőO�ʂɕ\������ɂ́H
���̃��X�g�́A�i���j�f�W�^���A�h�o���e�[�W���J������
�����֘A�L���T���V�X�e�� Jigsaw�i�W�O�\�[�j �ɂ�莩�����o�������̂ł��B
generated by

�u.NET TIPS�v


Insider.NET �t�H�[���� �V���L��
  • ��2��@�Ȍ��ȃR�[�f�B���O�̂��߂� �i2017/7/26�j
    �@�����_���ŋL�q�ł��郁���o�̑����Athrow���Aout�ϐ��A�^�v���ȂǁAC# 7�ɂ͈ȑO�����R�[�h���Ȍ��ɋL�q�ł���悤�ȋ@�\����������Ă���
  • ��1��@Visual Studio Code�f�o�b�O�̊�b�m�� �i2017/7/21�j
    �@Node.js�v���O�������f�o�b�O���Ȃ���AVisual Studio Code�ɓ�������Ă���f�o�b�O�@�\�̊�{�́u�L�v���}�X�^�[���悤
  • ��1��@���ĂȃR�[�f�B���O�̂��߂� �i2017/7/19�j
    �@C# 7�Œlj����ꂽ�V�@�\�̒�����A�u���l���e�����\���̉��P�v�Ɓu���[�J���֐��v���Љ��B�����͕�����₷���R�[�h���L�q����̂Ɏg����
  • Presentation Translator �i2017/7/18�j
    �@Presentation Translator��PowerPoint�p�̃A�h�C���B�v���[���e�[�V�������̎����̕t����A������ł̎��^�����A�X���C�h�̖|����s����
��IT���[���}�K�W���@�V������X�^�b�t�̃R���������[���œ͂��܂��i�����j

���ڂ̃e�[�}

Insider.NET �L�������L���O

�{�� ����