MATLAB: Appuyez sur un autre programme

 
Hello!
 
J’ai donc quelques scripts qui sont essentiellement une série de plusieurs images. J’ai également un programme indépendant qui peut définir des marqueurs via la touche (1,2,3, etc.). Ce que je recherche, c’est un moyen lorsque l’image change pour envoyer automatiquement un autre marqueur. Cette chose est-elle même possible? Soit avec matlab ou toute autre solution de contournement?
P.S. Si oui, cela peut-il fonctionner de manière à ce que les images restent en plein écran ou dois-je utiliser une configuration à deux moniteurs?
Je vous remercie!

Meilleure réponse

  • Bonjour, merci pour la réponse mais je me suis retrouvé avec une autre solution
     
    scrsz = [1 1 1920 1080];
    taskimg = figure;
    set(taskimg,'Position',scrsz,'Menubar','none',...
    'NumberTitle','off');
    set(taskimg,'WindowStyle','modal')
    pause(30)
    image = imread('Pebble1.tif');
    large = axes('Parent', taskimg, 'units', 'pixels');
    imshow(image, 'Parent', large)
    h = actxserver('WScript.Shell');
    h.AppActivate('EmotivPro')
    h.SendKeys('{1}')
    ginput(1)
    set(gcf,'WindowStyle','modal')
    h.AppActivate('EmotivPro')
    h.SendKeys('{1}')
    ginput(1)
     
    Donc, après avoir exécuté le script, j’ai 30 secondes (pause (30)) pour épingler en haut de la fenêtre de la figure.Ceest le programme d’épinglage de fenêtres.
     

     

  • MATLAB: Appuis sur les touches associés à la couleur

    C’est difficile à expliquer si nu avec moi. J’ai quatre couleurs qui randomisent donc aucune couleur n’est la même que n’importe quelle autre couleur:
     
    colarray = [c1; c2; c3; c4];
    colidx1 = randi(4,1,1);
    colour1 = colarray(colidx1,:);
    colidx2 = randi(4,1,1);
    while ismember(colidx2, colidx1)
    colidx2 = randi(4,1,1);
    end
    colour2 = colarray(colidx2,:);
    colidx3 = randi(4,1,1);
    while ismember(colidx3, [colidx1, colidx2])
    colidx3 = randi(4,1,1);
    end
    colour3 = colarray(colidx3,:);
    colidx4 = randi(4,1,1);
    while ismember(colidx4, [colidx1, colidx2, colidx3])
    colidx4 = randi (4,1,1);
    end
    colour4 = colarray(colidx4,:);
     
    et j’ai quatre flèches qui randomisent de sorte qu’aucune flèche ne fait face à la même direction que n’importe quelle autre flèche:
     
    random = randperm(4)
    random1 = random(1)
    random2 = random(2)
    random3 = random(3)
    random4 = random(4)
    if random1 == 1
    tri1 = downtri
    b1 = vertbaseq1
    elseif random1 == 2
    tri1 = uptri
    b1 = vertbaseq1
    elseif random1 == 3
    tri1 = righttri
    b1 = horzbaseq1
    else
    tri1 = lefttri
    b1 = horzbaseq1
    end
    if random2 == 1
    tri3 = downtri
    b3 = vertbaseq3
    elseif random2 == 2
    tri3 = uptri
    b3 = vertbaseq3
    elseif random2 == 3
    tri3 = righttri
    b3 = horzbaseq3
    else
    tri3 = lefttri
    b3 = horzbaseq3
    end
    if random3 == 1
    tri4 = downtri
    b4 = vertbaseq4
    elseif random3 == 2
    tri4 = uptri
    b4 = vertbaseq4
    elseif random3 == 3
    tri4 = righttri
    b4 = horzbaseq4
    else
    tri4 = lefttri
    b4 = horzbaseq4
    end
    if random4 == 1
    tri2 = downtri
    b2 = vertbaseq2
    elseif random4 == 2
    tri2 = uptri
    b2 = vertbaseq2
    elseif random4 == 3
    tri2 = righttri
    b2 = horzbaseq2
    else
    tri2 = lefttri
    b2 = horzbaseq2
    end
     
    Chaque flèche correspondra aux touches fléchées du clavier et la couleur apparaîtra dans un ovale derrière la flèche. J’ai une couleur cible (c1). Je veux un moyen de dire si la flèche est la couleur cible, alors il y aura une réponse différente que si la personne sélectionne une flèche qui n’est pas la couleur cible. Je ne suis pas trop inquiet pour les touches (je pense que je peux le comprendre), mais je ne sais pas comment associer la direction de la flèche à la couleur cible.
    Toute aide sera grandement appréciée, Brett

    Meilleure réponse

  • Je n’ai aucune idée de ce que vous faites en regardant le code car il en reste trop. Mais d’après votre description, ce pourraitvous donner quelques idées. L’utilisateur est censé frapper la flèche jaune. Le nombre de succès est dans le titre de la figure. C’est assez simple, mais c’était amusant à faire.
     

    function [] = gui_arrows()
    % Associate arrows with keypress...
    S.fh = figure('name','Yellow Arrow 0/0',...
    'menubar','none',...
    'numbert','off',...
    'pos',[100 100 300 300]);
    S.ax = axes('pos',[0 0 1 1],...
    'visible','off',...
    'handlevis','off');
    S.C = {'red';'blue';'green';'yellow'};
    S.C = S.C(randperm(4));
    S.Px = {[30,90];[255,195];...
    [150 150];[150 150]};
    S.Py = {[150 150];[150 150];...
    [30,90];[255,195]};
    S.A(1) = annotation('arrow','units','pix',...
    'X',circshift(S.Px{1},[0 rand>.5]),...
    'Y',S.Py{1},...
    'headstyle','plain',...
    'linewidth',2,...
    'color',S.C{1});
    S.A(2) = annotation('arrow','units','pix',...
    'X',circshift(S.Px{2},[0 rand>.5]),...
    'Y',S.Py{2},...
    'headstyle','plain',...
    'linewidth',2,...
    'color',S.C{2});
    S.A(3) = annotation('arrow','units','pix',...
    'X',S.Px{3},...
    'Y',circshift(S.Py{3},[0 rand>.5]),...
    'headstyle','plain',...
    'linewidth',2,...
    'color',S.C{3});
    S.A(4) = annotation('arrow','units','pix',...
    'X',S.Px{4},...
    'Y',circshift(S.Py{4},[0 rand>.5]),...
    'headstyle','plain',...
    'linewidth',2,...
    'color',S.C{4});
    S.CNT = 0;
    S.TRK = 0;
    movegui('center')
    set(S.fh,'windowkeypressfcn',{@fh_wkpfcn})
    guidata(S.fh,S) % Store the structure.
    function [] = fh_wkpfcn(varargin)
    % Callback for figure windowbuttondownfcn
    S = guidata(gcbf); % Get the structure.
    idx = find(strcmp(S.C,'yellow'));
    D1 = get(S.A(1),'X');
    D2 = get(S.A(2),'X');
    D3 = get(S.A(3),'Y');
    D4 = get(S.A(4),'Y');
    S.TRK = S.TRK + 1;
    switch varargin{2}.Key
    case 'uparrow'
    if idx==3 && D3(1)<D3(2)
    S.CNT = S.CNT + 1;
    elseif idx==4 && D4(1)<D4(2)
    S.CNT = S.CNT + 1;
    end
    case 'downarrow'
    if idx==3 && D3(1)>D3(2)
    S.CNT = S.CNT + 1;
    elseif idx==4 && D4(1)>D4(2)
    S.CNT = S.CNT + 1;
    end
    case 'leftarrow'
    if idx==1 && D1(1)>D1(2)
    S.CNT = S.CNT + 1;
    elseif idx==2 && D2(1)>D2(2)
    S.CNT = S.CNT + 1;
    end
    case 'rightarrow'
    if idx==1 && D1(1)<D1(2)
    S.CNT = S.CNT + 1;
    elseif idx==2 && D2(1)<D2(2)
    S.CNT = S.CNT + 1;
    end
    otherwise
    end
    S.C = S.C(randperm(4));
    set(S.A(1),'X',circshift(S.Px{1},[0 rand>.5]),...
    'color',S.C{1})
    set(S.A(2),'X',circshift(S.Px{2},[0 rand>.5]),...
    'color',S.C{2})
    set(S.A(3),'Y',circshift(S.Py{3},[0 rand>.5]),...
    'color',S.C{3})
    set(S.A(4),'Y',circshift(S.Py{4},[0 rand>.5]),...
    'color',S.C{4})
    set(S.fh,'name',sprintf('Yellow Arrow %i/%i',S.CNT,S.TRK))
    guidata(S.fh,S)